package com.icinfo.cloud.provider.punish.service;

import com.alibaba.fastjson.JSONObject;
import com.icinfo.cloud.provider.common.service.PunishBaseService;
import com.icinfo.cloud.provider.punish.dto.*;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.PoliceAdjudicationVo;
import com.icinfo.cloud.provider.punish.ucase.caseregister.vo.HandleAssistVo;
import com.icinfo.cloud.provider.punish.vo.*;
import com.icinfo.framework.common.web.Result;

import java.util.List;
import java.util.Map;

/**
 * @Description 简易处罚对应的Service接口
 * @Author zhengqiang
 * @Date 2022/6/14 14:29
 **/
public interface ISimpleCaseService extends PunishBaseService {

    /**
     * 描述： 根据案由编码及当事人获取1年内重复违法次数
     *
     * @return {@link int}
     * @author: zhengqiang
     * @date: 2022/6/20
     * @param: queryDto
     **/
    int getCaseMainCountByReasonCodeAndParty(CaseReasonQueryDto queryDto);

    /**
     * 描述： 根据案由编码及当事人获取1年内重复违法列表
     *
     * @return {@link List< CaseMainRepeatVo>}
     * @author: zhengqiang
     * @date: 2022/6/20
     * @param: queryDto
     **/
    CaseMainQueryByYearVo getCaseMainListByReasonCodeAndParty(CaseReasonQueryDto queryDto);

    /**
     * 根据案由编码及当事人查询2年内，重复违法，全部违法，责令改正
     * @param queryDto
     * @return
     */
    CasePartyIllegalTimesVo getIllegalTimesByReasonCodeAndParty(CaseReasonQueryDto queryDto);

    /**
     * 根据案由编码及当事人获取N年内重复违法次数（立案通过即算）
     *
     * @param: queryDto
     **/
    int getIllegalTimesCountByReasonCodeAndParty(CaseReasonQueryDto queryDto);

    /**
     * 描述：简易处罚保存方法
     *
     * @return {@link SimpleCaseSaveVo}
     * @author: zhengqiang
     * @date: 2022/6/15
     * @param: saveDto
     **/
    SimpleCaseSaveVo saveCase(SimpleCaseSaveDto saveDto);

    /**
     * 描述： 生成简易处罚相关文书
     *
     * @return
     * @author: zhengqiang
     * @date: 2022/6/24
     * @param: saveDto
     * @param: asyncKindList 异步处理文书种类
     **/
    void dealSimpleCaseDocumentRecords(SimpleCaseSaveDto saveDto, List<String> asyncKindList);

    /**
     * 描述： 删除简易处罚立案相关数据
     *
     * @return
     * @author: zhengqiang
     * @date: 2022/6/24
     * @param: saveDto
     **/
    boolean deleteCaseInfo(String caseId);

    /**
     * 删除当前用户暂存数据
     *
     * @return
     */
    boolean deleteTemporaryCase();

    /**
     * 描述： 查询简易案件录入数据
     *
     * @return {@link JSONObject}
     * @author: zhengqiang
     * @date: 2022/6/20
     * @param: queryDto
     **/
    SimpleCaseInfoVo getCaseRegisterDetailSimpleInfo(SimpleCaseQueryDto queryDto);

    /**
     * 描述： 简易案件保存完成
     *
     * @return {@link boolean}
     * @author: zhengqiang
     * @date: 2022/6/20
     * @param: simpleCaseSaveFinishDto
     **/
    boolean saveCaseFinish(SimpleCaseSaveFinishDto simpleCaseSaveFinishDto);

    /**
     * 描述： 简易处罚数据暂存
     *
     * @return {@link int}
     * @author: zhengqiang
     * @date: 2022/6/21
     * @param: saveDto
     **/
    int saveTemporary(SimpleCaseSaveDto saveDto);

    /**
     * 根据统一信用代码获取企业信息
     *
     * @param tyxydm
     * @return {@link Map< String, Object>}
     * @author liyafeng
     * @date 2022/7/1
     */
    JSONObject getEntInfoByTyxydm(String tyxydm);

    /**
     * @param idCardObj
     * @return
     */
    Result getPersonInfoByIdCard(JSONObject idCardObj);

    /**
     * 获取有执法证协办人员列表
     *
     * @return
     */
    Result<List<HandleAssistVo>> getAssistHandleList();

    /**
     * 描述： 获取历史最近3个办案人员
     *
     * @return {@link Result< List< HandleAssistVo>>}
     * @author: zhengqiang
     * @date: 2022/8/27
     * @param: request
     **/
    Result<List<HandleAssistVo>> getHisAssistHandleList(HisAssistHandleRequest request);

    /**
     * 根据名称搜索机构用户
     *
     * @return
     */
    Result<List<HandleAssistVo>> searchOrgUserListByName(String userName);

    /**
     * 描述： 检验姓名与身份证是否匹配
     *
     * @return {@link boolean}
     * @author: zhengqiang
     * @date: 2022/10/11
     * @param: realName
     * @param: idCard
     **/
    boolean checkRealName(String realName, String idCard);

    /**
     * @param saveDto
     */
    void dealTemporaryCaseData(SimpleCaseSaveDto saveDto);

    /**
     * 描述：获取简易程序重复立案记录
     *
     * @param queryDto 查询dto
     * @return {@link List<SimpleCaseRepeatInfoVo> }
     * @author shishengyao
     * @date 2022/11/21
     */
    List<SimpleCaseRepeatInfoVo> getSimpleCaseRepeatList(SimpleCaseRepeatQueryDto queryDto);

    /**
     * 描述：撤销简易程序案件
     *
     * @param saveDto 保存dto
     * @return boolean
     * @author shishengyao
     * @date 2022/11/21
     */
    boolean saveSimpleCaseRecall(SimpleCaseRecallSaveDto saveDto);

    /**
     * 描述：简易程序案件执行完毕
     *
     * @param saveDto 保存dto
     * @return boolean
     * @author shishengyao
     * @date 2022/11/21
     */
    boolean saveSimpleCaseExecuteFinish(SimpleCaseExecuteFinishSaveDto saveDto);

    /**
     * 获取行政行为码
     * @param caseId
     * @return
     */
    Map<String, String> getCaseQRCode(String caseId);

    /**
     * 描述：简易处罚数据回流
     *
     * @param caseId 案件id
     * @return String 错误信息
     * @author xiangyuyu
     * @date 2023/5/4
     */
    String callBackSimpleCaseInfo(String caseId);

    /**
     * 根据统一信用代码查询数据
     *
     * @param tyxydm
     * @return
     */
    Result getEntInfoByTyxydmOfPc(String tyxydm);

    /**
     * 公安委托参数验证，文号使用情况验证，公安委托单位部门签章存在验证 并将裁定标准相关数据填入
     */
    PoliceAdjudicationVo checkSimpleCaseParameter(SimpleCaseSaveDto saveDto);

    /**
     * 移交案件到移交记录
     *
     * @param saveDto 简易程序案件保存对象
     * @return 是否移交了案件，false，未移交，true：移交
     */
    boolean transferCaseToRecord(SimpleCaseSaveDto saveDto);

    /**
     * 检查简易程序处罚金额是否符合裁量标准
     * @param saveDto
     */
    void verifyDiscretionAmount(SimpleCaseSaveDto saveDto, PoliceAdjudicationVo policeAdjudicationVo);
}
